/* This file is part of FObject.
 *
 * FObject is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * FObject is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with FObject.  If not, see <http://www.gnu.org/licenses/>.
 */

#import <Bool.h>
#import <Int.h>
#import <Float.h>
#import <String.h>
#import <Pair.h>

@interface Prelude : NSObject {
}

+ (Bool*) boxBool:(BOOL)b;
+ (Int*) boxInt:(int)n;
+ (Float*) boxFloat:(float)f;
+ (String*) boxString:(NSString*)s;

+ (Bool*) andBool:(Bool*)b:(Bool*)c;
+ (Bool*) orBool:(Bool*)b:(Bool*)c;
+ (Bool*) notBool:(Bool*)b;

+ (Int*) negInt:(Int*)n;
+ (Int*) addInt:(Int*)m:(Int*)n;
+ (Int*) subInt:(Int*)m:(Int*)n;
+ (Int*) mulInt:(Int*)m:(Int*)n;
+ (Int*) divInt:(Int*)m:(Int*)n;
+ (Int*) modInt:(Int*)m:(Int*)n;

+ (Float*) negFloat:(Float*)f;
+ (Float*) addFloat:(Float*)f:(Float*)g;
+ (Float*) subFloat:(Float*)f:(Float*)g;
+ (Float*) mulFloat:(Float*)f:(Float*)g;
+ (Float*) divFloat:(Float*)f:(Float*)g;

+ (Float*) floatOfInt:(Int*)m;
+ (Int*) intOfFloat:(Float*)f;
+ (Int*) intOfString:(String*)s;
+ (Float*) floatOfString:(String*)s;
+ (String*) stringOfInt:(Int*)m;
+ (String*) stringOfFloat:(Float*)f;

+ (String*) concatString:(String*)s:(String*)t;

+ (Value*) null;
+ (Bool*) isNull: (Value*) v;
+ (Pair*) cons: (Value*) v: (Value*) w;
+ (Value*) first: (Pair*) p;
+ (Value*) second: (Pair*) p;

@end
